package com.demo.pojo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * 学习通知/公告实体
 * 支持管理员和教师发布通知
 */
@TableName("notice")
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Notice implements Serializable {
    @TableId(type = IdType.AUTO)
    private Long noticeId;

    /**
     * 标题
     */
    @TableField("title")
    private String title;

    /**
     * 内容
     */
    @TableField("content")
    private String content;

    /**
     * 发布者类型：admin-管理员, teacher-教师
     */
    @TableField("publisher_type")
    private String publisherType;

    /**
     * 发布者ID（对应admin表或teacher表的ID）
     */
    @TableField("publisher_id")
    private Long publisherId;

    /**
     * 发布者姓名（冗余字段，便于查询）
     */
    @TableField("publisher_name")
    private String publisherName;

    /**
     * 目标范围：all-全体学生, student-指定学生, class-指定班级
     */
    @TableField("target_scope")
    private String targetScope;

    /**
     * 目标ID列表，逗号分隔（当target_scope为student或class时使用）
     */
    @TableField("target_ids")
    private String targetIds;

    /**
     * 通知类型：general-一般通知, exam-考试通知, homework-作业通知, course-课程通知, system-系统通知
     */
    @TableField("notice_type")
    private String noticeType;

    /**
     * 优先级：0-普通, 1-重要, 2-紧急
     */
    @TableField("priority")
    private Integer priority;

    /**
     * 学期（如：2025春季、2024秋季）
     */
    @TableField("semester")
    private String semester;

    /**
     * 状态：0-草稿, 1-已发布, 2-已撤回
     */
    @TableField("status")
    private Integer status;

    /**
     * 发布时间
     */
    @TableField("publish_time")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "GMT+8")
    private Date publishTime;

    /**
     * 创建时间
     */
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "GMT+8")
    private Date updateTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}


